package com.etime.shycourse.orde.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.etime.shycourse.orde.dto.SysOrderDetailsDto;
import com.etime.shycourse.orde.pojo.Orderdetail;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * @author wb
 * @since 2022-01-10
 */
@Repository("SysOrderdetailMapper")
public interface OrderdetailMapper extends BaseMapper<Orderdetail> {
    /**
     * 弃用 一对一表 连接表  错误  --->应该是一对多 弃用
     * 后台功能，一般由管理员或者财务人员有权限查看
     * 查询 订单列表；
     * 订单详情查询数据  可选填条件订单号 用户id 下单时间 分页
     *
     * @param orderno 可选填条件订单号"
     *                orderuserid  可选填选择条件用户id
     *                pagenum, value = "第几页"),
     *                pagesize, value = "每页多少行,
     *                orderstate
     *                ordercreatetimeOne  可选填选择条件用户下单时间 开始"
     *                ordercreatetimeTwo  可选填选择条件用户下单时间 结束"
     * @return Page<SysOrderDetailsDto>
     */
    @Deprecated
    Page<SysOrderDetailsDto> selectOrderDetailsPageBy(Page<SysOrderDetailsDto> page,
                                                      @Param("orderno") String orderno,
                                                      @Param("orderuserid") Integer orderuserid,
                                                      @Param("orderstate") Integer orderstate,
                                                      @Param("ordercreatetimeOne") Date ordercreatetimeOne,
                                                      @Param("ordercreatetimeTwo") Date ordercreatetimeTwo);

    /**
     * 一对多
     * 后台功能，一般由管理员或者财务人员有权限查看
     * 查询 订单列表；
     * 订单详情查询数据  可选填条件订单号 用户id 下单时间 分页
     *
     * @param orderno            可选填条件订单号"
     * @param orderuserid        可选填选择条件用户id
     * @param page               value = "第几页" value = "每页多少行,
     * @param orderpayment       支付方式
     * @param orderstate,        value = "订单状态,
     * @param ordercreatetimeOne 可选填选择条件用户下单时间 开始"
     * @param ordercreatetimeTwo 可选填选择条件用户下单时间 结束"
     * @return Page<SysOrderDetailsDto>
     */
    Page<SysOrderDetailsDto> selectOrderDetailsPageBys(Page<SysOrderDetailsDto> page,
                                                       @Param("orderno") String orderno,
                                                       @Param("orderuserid") Integer orderuserid,
                                                       @Param("orderstate") Integer orderstate,
                                                       @Param("orderpayment") String orderpayment,
                                                       @Param("ordercreatetimeOne") Date ordercreatetimeOne,
                                                       @Param("ordercreatetimeTwo") Date ordercreatetimeTwo);

    /**
     * 根据用户id和课程id查询指定用户是否购买过指定课程。
     * @param userid
     * @param courseid
     * @return
     */
    @Select("select a.* from orderdetail a " +
            "inner join orders b on a.orderid=b.orderid " +
            "where b.orderstate=2 and b.orderuserid=#{userid} " +
            "and a.odcourseid=#{courseid} and odchapterid is null and odnodeid is null and odlessonid is null")
    List<Orderdetail> selectOrderDetailByUseridAndCourseId(@Param("userid") Integer userid,@Param("courseid")Integer courseid);
}
